如何使用go生成二维码,及动态生成

二维码在很多场合使用,比如扫码支付,扫码打开链接,扫码加好友等等。

这里介绍一个库,使用这个库,可以简单地生成二维码。并介绍如何使用这个库,动态生成二维码。

使用go生成二维码图片

可以使用go语言,实现任意内容的二维码生成。并保存为文件。

接下来,我们就开始了。show you my code:

package main

import qrcode "github.com/skip2/go-qrcode"

func main() {
	qrcode.WriteFile("https://www.wafunny.com", qrcode.Medium, 256, "qrcode.png")
}

运行结果:

qrcode

这里,使用本博客域名,并保存为qrcode.png 以文件作为二维码的载体。

使用go 动态生成二维码

现在介绍,结合http 库,动态生成qrcode 并返回。而无需保存成图片

可以使用Encode(content string, level RecoveryLevel, size int) ([]byte, error) 函数生成png 格式的字节码。

这里使用qrcode.New 创建qrcode 结构体,然后使用PNG 函数生成字节码。为了以后可扩展性。

package main

import (
	"fmt"
	qrcode "github.com/skip2/go-qrcode"
	"log"
	"net/http"
	"time"
)

func Qrcode(w http.ResponseWriter, req *http.Request) {
	var err error
	defer func() {
		if err != nil {
			w.WriteHeader(500)
			return
		}
	}()
	q, err := qrcode.New(fmt.Sprintf("https://www.wafunny.com?t=%d", time.Now().Unix()), qrcode.Medium)
	if err != nil {
		return
	}
	png, err := q.PNG(256)
	if err != nil {
		return
	}
	w.Header().Set("Content-Type", "image/png")
	w.Header().Set("Content-Length", fmt.Sprintf("%d", len(png)))
	w.Write(png)
}

func main() {
	http.HandleFunc("/qrcode", Qrcode)
	log.Fatal(http.ListenAndServe(":8008", nil))
}

执行后,访问 http://localhost:8008/qrcode 就可以看到二维码了。 并且注意,每次刷新都不一样,因为我再url后面加了个时间戳:)

如果需要改变前景以及背景的颜色,可以设置

// User settable drawing options.
ForegroundColor color.Color
BackgroundColor color.Color

贴图操作

贴图可以使用 Bitmap() [][]bool 函数,取出二维码各点的值。并自行画出二维码。

总结

二维码应用多多,通过服务器端生成,主要还是为了动态生成。如果只是简单的url编码,完全可以由客户端,或js 自行生成。

humboldt Written by:

humboldt 的趣味程序园